#include "Ventana.h"
#include "Cuadrado.h"

Ventana::Ventana(){
}
Ventana::Ventana(std::string nombre)
{
	this->nombre = nombre;
	this->alto = 700;
	this->texturaFondo = "imagenes\\puente.jpg";
	this->ancho = 1000;
	this->colorFondoVentana = new Color(0,90,0);
}

Ventana::~Ventana(void)
{
}
bool Ventana::existeIdFigura(std::string idFigura){
	bool existe = false;
	std::list<Figura*>::iterator iter;
	Figura *figura;
	iter = this->iteratorListaFiguras();
	int i=1;
	while(i<=this->sizeListaFiguras()){
		figura = *iter;
		if(figura->getId().compare(idFigura) == 0){
			return true;
		}
		else{
			i++;
			iter++;
		}
	}
	return existe;
}

bool Ventana::existeIdFigDinamicas(std::string idFigura){
	bool existe = false;
	std::list<Figura*>::iterator iter;
	Figura *figura;
	iter = this->iteratorListaFigDinamicas();
	int i=1;
	while(i<=this->sizeListaFigDinamicas()){
		figura = *iter;
		if(figura->getId().compare(idFigura) == 0){
			return true;
		}
		else{
			i++;
			iter++;
		}
	}
	return existe;
}

void Ventana::addFigura(Figura *figura){
	//si existe el id de figura tiro error y no lo agrego
	if(this->existeIdFigura(figura->getId())){
		printf("error: idFigura duplicado, ya existia una figura con el id: en ventana\n " );
	}
	//sino la agrego
	else{
		this->listaFiguras.push_back(figura);
	}
}
void Ventana::addFigDinamicas(Figura *figura){
	//modifico para q pueda agregar al escenario mas de una misma figura
	//lo que la hace unica es su posicion
	this->listaFigDinamicas.push_back(figura);

	/*	//si existe el id de figura tiro error y no lo agrego
	if(this->existeIdFigDinamicas(figura->getId())){
		printf("error: idFigDinamica duplicado, ya existia una figura con el id: en ventana\n " );
	}
	//sino la agrego
	else{
		this->listaFigDinamicas.push_back(figura);
	}
	*/
}
int Ventana::getAlto(){
	return this->alto;
}
int Ventana::getAncho(){
	return this->ancho;
}

SDL_Surface* Ventana::getScreen(){
	return this->screen;

}
int Ventana::sizeListaFiguras(){
	return this->listaFiguras.size();
}

int Ventana::sizeListaFigDinamicas(){
	return this->listaFigDinamicas.size();
}
int Ventana::sizeListaTexturas(){
	return this->listaTexturas.size();
}

std::list<Figura*>::iterator Ventana::iteratorListaFiguras(){
	return this->listaFiguras.begin();
}
std::list<Figura*>::iterator Ventana::iteratorListaFigDinamicas(){
	return this->listaFigDinamicas.begin();
}
std::list<Textura*>::iterator Ventana::iteratorListaTexturas(){
	return this->listaTexturas.begin();
}
SDL_Color Ventana::getColorFondoVentana(){
	return	this->colorFondoVentana->getColor();
}
std::string Ventana::getPathTextura(std::string id){
	std::list<Textura*>::iterator iter;
	Textura *textura;
	iter = this->iteratorListaTexturas();
	int i=1;
	std::string idAux = "NULL";
	while(i<=this->sizeListaTexturas()){
		textura = *iter;
		if(textura->getId().compare(id)==0){
			return textura->getPath();
		}
		else{
			i++;
			iter++;
		}
	}
	return idAux;
}
void Ventana::pintarPantalla(){
			printf("PintarPantalla\n");
			SDL_Rect dest;
			dest.x = 0;
			dest.y = 0;
			dest.w = this->screen->w;
			dest.h = this->screen->h;
			SDL_Color color = this->getColorFondoVentana();
			SDL_FillRect(screen,&dest,SDL_MapRGB(screen->format, color.r,color.g,color.b));
}
/*
int Ventana::graficar(){
	int done = 0;
	// Iniciar SDL
	if (SDL_Init(SDL_INIT_VIDEO) < 0) {
		printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
		return -1;
	}
	atexit(SDL_Quit);
	// Comprobamos que sea compatible el modo de video
	if(SDL_VideoModeOK(this->getAncho(), this->getAlto(), 32, SDL_SWSURFACE|SDL_DOUBLEBUF) == 0) {
		std::cout<< "Modo no soportado: " << SDL_GetError() << endl;
		exit(1);
	}
	//seteamos el titulo a la barra
	SDL_WM_SetCaption(this->nombre.c_str(),NULL);

	this->screen = SDL_SetVideoMode(this->getAncho(),this->getAlto(),32, SDL_SWSURFACE | SDL_DOUBLEBUF );
	if(!screen){
		std::cout<<"No se pudo iniciar la pantalla: %s"<<SDL_GetError();
		return -1;
	}
	this->pintarPantalla();
	std::list<Figura*>::iterator iter;
	iter = this->iteratorListaFiguras();
	
	Posicion* posBtBorrar = new Posicion(220,245);
	Rectangulo* btBorrar = new Rectangulo("1",100,35,posBtBorrar);
	this->addFigura(btBorrar);
	

	Color* colorBtnApretado = new Color(0,0,200);
	Color* colorBtnNoApretado = new Color(200,200,200);

	bool terminar = false;
	SDL_Event evento;
	int i = 1;
	Figura *figura;
	while(i<=this->sizeListaFiguras()){
		figura = *iter;
			figura->dibujar(this->screen);
		iter++;
		i++;
	}
	//loop
	while(terminar == false) {
	SDL_Flip(this->getScreen());//encargado de que se repinte		
	
		// Control de Eventos
	while (SDL_PollEvent(&evento)) {

			if(evento.type == SDL_KEYDOWN) {
				if(evento.key.keysym.sym == SDLK_ESCAPE)
					terminar = true;
			}
			if(evento.type == SDL_QUIT){
				terminar = true;
			}
		}

	}

	return 0;
}
*/

